package Views.Compra;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import Fisica.DAOCompra;
import Fisica.DAOExtencion;
import Fisica.DAOPadron;
import Fisica.DAOTarjeta;
import Fisica.DAOTicket;
import Inteface.InterfaceGrilla;
import Inteface.InterfacePanel;
import Logica.Propiedades;
import Logica.Util;
import Modelo.CtaCte_Padron;
import Modelo.Fac_Ventas;
import Modelo.Tarjeta;
import Modelo.TarjetaCompra;
import Modelo.TarjetaExtencion;

public class CompraCampos extends JPanel implements InterfaceGrilla, InterfacePanel {
	private JTextField tfID;
	private JTextField tfTicket;
	private JTextField tfFecha;
	private JTextField tfNombre;
	private JTextField tfIdTarjeta;
	private JTextField tfObs;
	private JTextField tfPuntos;

	/**
	 * Create the panel.
	 */
	public CompraCampos(int id) {
		setLayout(null);
		this.setVisible(true);
		
		JLabel lblId = new JLabel("ID");
		lblId.setBounds(10, 47, 46, 14);
		add(lblId);
		
		tfID = new JTextField();
		tfID.setEditable(false);
		tfID.setBounds(70, 44, 53, 20);
		add(tfID);
		tfID.setColumns(10);
		
		JLabel lblCompra = new JLabel("VENTA");
		lblCompra.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblCompra.setBounds(10, 9, 130, 20);
		add(lblCompra);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setBounds(10, 34, 135, 2);
		add(separator_2);
		
		JLabel lblNroTicket = new JLabel("Ticket");
		lblNroTicket.setBounds(10, 75, 60, 14);
		add(lblNroTicket);
		
		tfTicket = new JTextField();
		tfTicket.setToolTipText("N\u00FAmero de Ticket");
		tfTicket.setHorizontalAlignment(SwingConstants.CENTER);
		tfTicket.setColumns(10);
		tfTicket.setBounds(70, 72, 86, 20);
		add(tfTicket);
		
		JLabel lblCliente = new JLabel("CLIENTE");
		lblCliente.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblCliente.setBounds(211, 9, 130, 20);
		add(lblCliente);
		
		JLabel lblSucursal = new JLabel("Nombre");
		lblSucursal.setBounds(211, 75, 60, 14);
		add(lblSucursal);
		
		JSeparator separator_3 = new JSeparator();
		separator_3.setBounds(211, 34, 135, 2);
		add(separator_3);
		
		
		JLabel lblFecha = new JLabel("Fecha");
		lblFecha.setBounds(211, 107, 46, 14);
		add(lblFecha);
		
		JButton btFecha = new JButton("...");
		btFecha.setBounds(386, 103, 53, 23);
		add(btFecha);
		
		tfFecha = new JTextField();
		tfFecha.setHorizontalAlignment(SwingConstants.CENTER);
		tfFecha.setBounds(271, 104, 105, 20);
		tfFecha.setText(Util.getFechaActual());
		add(tfFecha);
		tfFecha.setColumns(10);
		
		this.getFechaCalendario(btFecha, tfFecha);
		
		tfNombre = new JTextField();
		tfNombre.setEditable(false);
		tfNombre.setToolTipText("Nombre cliente");
		tfNombre.setBounds(271, 69, 168, 20);
		add(tfNombre);
		tfNombre.setColumns(10);
		
		JLabel lblTarjeta = new JLabel("Tarjeta");
		lblTarjeta.setBounds(211, 47, 60, 14);
		add(lblTarjeta);
		
		tfIdTarjeta = new JTextField();
		tfIdTarjeta.setBounds(271, 44, 105, 20);
		add(tfIdTarjeta);
		tfIdTarjeta.setColumns(10);
		
		tfObs = new JTextField();
		tfObs.setToolTipText("Observaciones");
		tfObs.setBounds(10, 125, 146, 20);
		add(tfObs);
		tfObs.setColumns(10);
		
		tfPuntos = new JTextField();
		tfPuntos.setEditable(false);
		tfPuntos.setFont(new Font("Tahoma", Font.PLAIN, 35));
		tfPuntos.setHorizontalAlignment(SwingConstants.CENTER);
		tfPuntos.setToolTipText("Puntos por compra");
		tfPuntos.setBounds(154, 175, 135, 40);
		add(tfPuntos);
		tfPuntos.setColumns(10);
		
		JButton btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
//				buscar ticket
			}
		});
		btnBuscar.setBounds(68, 95, 89, 23);
		add(btnBuscar);
					
		this.init(id);
		
	}

	/*Llamador del seleccionar fecha en calendario*/
	public void getFechaCalendario(JButton boton, final JTextField textfield){
	 final CompraCampos f = this;
	 boton.addActionListener(new ActionListener() {
	         public void actionPerformed(ActionEvent ae) {
	                textfield.setText(new Logica.CalendarioPicker(f).setPickedDate());
	               }
	         });
	 }
	
	@Override
	public void guardar() {
		try {
			DAOCompra dc = new DAOCompra();
			TarjetaCompra tc = new TarjetaCompra();
			
			int id = -1;
			if(tfID.getText().length() > 0){
				Integer.parseInt(tfID.getText());
			}
				
			tc = (TarjetaCompra) dc.get(Integer.valueOf(id));
			
			if(tfTicket.getText().length()>0 && tfIdTarjeta.getText().length()>0){
				tc.setNro_ticket(tfTicket.getText());
				tc.setNro_tarjeta(Integer.parseInt(tfIdTarjeta.getText()));
				tc.setFecha(Util.getDate(tfFecha.getText()));
				tc.setObs(tfObs.getText());
				
				/* falta calcular los puntos*/
				tc.setPuntos(Integer.parseInt(tfPuntos.getText()));
				
				dc.insert(tc);
			}else{
				
			}
						
			this.cancelar();
			
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "Error en la carga de datos", "Error",
			        JOptionPane.WARNING_MESSAGE);
			e.printStackTrace();
		}
		
		
	}

	@Override
	public void cancelar() {
		tfID.setText("");
		tfTicket.setText("0");
		tfObs.setText("");
		tfIdTarjeta.setText("");
		tfNombre.setText("");
		tfFecha.setText(Util.getFechaActual());
	}

	public Object primero() {
		DAOCompra dc = new DAOCompra();
		return (TarjetaCompra) dc.getFirst();		
	}

	public Object ultimo() {
		DAOCompra dt = new DAOCompra();
		return (TarjetaCompra) dt.getLast();
	}

	public Object anterior() {
		DAOCompra dt = new DAOCompra();
		if(tfID.getText().length()>0)
			return (TarjetaCompra) dt.getPre(Integer.parseInt(tfID.getText()));
		else return primero();
	}

	public Object posterior() {
		DAOCompra dt = new DAOCompra();
		if(tfID.getText().length()>0)
			return (TarjetaCompra) dt.getPost(Integer.parseInt(tfID.getText()));
		else return primero();
	}

	@Override
	public boolean grilla() {
		return false;
	}

	@Override
	public boolean campos() {
		return true;
	}

	@Override
	public int getPanel() {
		return 6;
	}

	@Override
	public void init(int id) {	
		
		if(id == -1){
			cancelar();
		}else{
			DAOCompra dc = new DAOCompra();
			DAOTarjeta dt = new DAOTarjeta();
						
			TarjetaCompra c = (TarjetaCompra)dc.get(id);
			Tarjeta t = (Tarjeta) dt.get(c.getId_tarjeta());
			
			tfID.setText(Integer.toString(c.getId()));
			tfTicket.setText(c.getNro_ticket());
			tfIdTarjeta.setText(Integer.toString(c.getId_tarjeta()));
			String nombre = "";
			if(t.getExtencion().equals("0")){
				CtaCte_Padron pad = DAOPadron.get(t.getPadron_codigo());
				nombre = pad.getPadron_apelli()+", "+pad.getPadron_nombre();
			}else{
				TarjetaExtencion ex = DAOExtencion.get(t.getId());
				nombre = ex.getApellido()+", "+ex.getNombre();				
			}
			tfNombre.setText(nombre);
			
			/** Calculo el coeficiente del puntaje de la compra segun la categoria */
			Propiedades cp = new Propiedades();
			int coeficientePuntaje = cp.getCoeficientePuntos(Integer.toString(t.getIdCategoria()));
			DAOTicket dtik = new DAOTicket();
			Fac_Ventas fv = dtik.get("CIERRE", Util.getDate(c.getFecha()), Integer.parseInt(c.getNro_ticket()));
			
			Propiedades prop = new Propiedades();
			int categoria = prop.getCoeficientePuntos(Integer.toString(t.getIdCategoria()));
			c.setPuntos((int)fv.getBonificacion()/categoria);
			
						
		}
	}

	@Override
	public int getRowSelected() {
		return -1;
	}
	
	
    public void nuevo() {
    	this.cancelar();
    	tfTicket.setText("");			
	}
	
	public void finNuevo() {
		this.nuevo();			
	}

	@Override
	public int setprimero() {
		return -1;
	}

	@Override
	public int setultimo() {
		return -1;
	}

	@Override
	public int setanterior() {
		return -1;
	}

	@Override
	public int setposterior() {
		return -1;
	}
}
